/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package it.apuliait.model;

import com.liferay.portal.kernel.bean.AutoEscapeBeanHandler;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.util.ProxyUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.model.BaseModel;
import com.liferay.portal.model.impl.BaseModelImpl;

import it.apuliait.service.ClpSerializer;
import it.apuliait.service.DocumentoXmlFirmatoLocalServiceUtil;

import java.io.Serializable;

import java.lang.reflect.Method;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Donatello
 */
public class DocumentoXmlFirmatoClp extends BaseModelImpl<DocumentoXmlFirmato>
	implements DocumentoXmlFirmato {
	public DocumentoXmlFirmatoClp() {
	}

	@Override
	public Class<?> getModelClass() {
		return DocumentoXmlFirmato.class;
	}

	@Override
	public String getModelClassName() {
		return DocumentoXmlFirmato.class.getName();
	}

	@Override
	public long getPrimaryKey() {
		return _documentoXmlFirmatoId;
	}

	@Override
	public void setPrimaryKey(long primaryKey) {
		setDocumentoXmlFirmatoId(primaryKey);
	}

	@Override
	public Serializable getPrimaryKeyObj() {
		return _documentoXmlFirmatoId;
	}

	@Override
	public void setPrimaryKeyObj(Serializable primaryKeyObj) {
		setPrimaryKey(((Long)primaryKeyObj).longValue());
	}

	@Override
	public Map<String, Object> getModelAttributes() {
		Map<String, Object> attributes = new HashMap<String, Object>();

		attributes.put("documentoXmlFirmatoId", getDocumentoXmlFirmatoId());
		attributes.put("documentoXmlIDFK", getDocumentoXmlIDFK());
		attributes.put("dataInvioDocumento", getDataInvioDocumento());
		attributes.put("nomeDocumento", getNomeDocumento());
		attributes.put("fileDocumento", getFileDocumento());
		attributes.put("identificativoSdi", getIdentificativoSdi());
		attributes.put("dataOraRicezione", getDataOraRicezione());
		attributes.put("errore", getErrore());

		return attributes;
	}

	@Override
	public void setModelAttributes(Map<String, Object> attributes) {
		Long documentoXmlFirmatoId = (Long)attributes.get(
				"documentoXmlFirmatoId");

		if (documentoXmlFirmatoId != null) {
			setDocumentoXmlFirmatoId(documentoXmlFirmatoId);
		}

		Long documentoXmlIDFK = (Long)attributes.get("documentoXmlIDFK");

		if (documentoXmlIDFK != null) {
			setDocumentoXmlIDFK(documentoXmlIDFK);
		}

		String dataInvioDocumento = (String)attributes.get("dataInvioDocumento");

		if (dataInvioDocumento != null) {
			setDataInvioDocumento(dataInvioDocumento);
		}

		String nomeDocumento = (String)attributes.get("nomeDocumento");

		if (nomeDocumento != null) {
			setNomeDocumento(nomeDocumento);
		}

		String fileDocumento = (String)attributes.get("fileDocumento");

		if (fileDocumento != null) {
			setFileDocumento(fileDocumento);
		}

		String identificativoSdi = (String)attributes.get("identificativoSdi");

		if (identificativoSdi != null) {
			setIdentificativoSdi(identificativoSdi);
		}

		String dataOraRicezione = (String)attributes.get("dataOraRicezione");

		if (dataOraRicezione != null) {
			setDataOraRicezione(dataOraRicezione);
		}

		String errore = (String)attributes.get("errore");

		if (errore != null) {
			setErrore(errore);
		}
	}

	@Override
	public long getDocumentoXmlFirmatoId() {
		return _documentoXmlFirmatoId;
	}

	@Override
	public void setDocumentoXmlFirmatoId(long documentoXmlFirmatoId) {
		_documentoXmlFirmatoId = documentoXmlFirmatoId;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setDocumentoXmlFirmatoId",
						long.class);

				method.invoke(_documentoXmlFirmatoRemoteModel,
					documentoXmlFirmatoId);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public long getDocumentoXmlIDFK() {
		return _documentoXmlIDFK;
	}

	@Override
	public void setDocumentoXmlIDFK(long documentoXmlIDFK) {
		_documentoXmlIDFK = documentoXmlIDFK;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setDocumentoXmlIDFK",
						long.class);

				method.invoke(_documentoXmlFirmatoRemoteModel, documentoXmlIDFK);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public String getDataInvioDocumento() {
		return _dataInvioDocumento;
	}

	@Override
	public void setDataInvioDocumento(String dataInvioDocumento) {
		_dataInvioDocumento = dataInvioDocumento;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setDataInvioDocumento",
						String.class);

				method.invoke(_documentoXmlFirmatoRemoteModel,
					dataInvioDocumento);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public String getNomeDocumento() {
		return _nomeDocumento;
	}

	@Override
	public void setNomeDocumento(String nomeDocumento) {
		_nomeDocumento = nomeDocumento;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setNomeDocumento", String.class);

				method.invoke(_documentoXmlFirmatoRemoteModel, nomeDocumento);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public String getFileDocumento() {
		return _fileDocumento;
	}

	@Override
	public void setFileDocumento(String fileDocumento) {
		_fileDocumento = fileDocumento;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setFileDocumento", String.class);

				method.invoke(_documentoXmlFirmatoRemoteModel, fileDocumento);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public String getIdentificativoSdi() {
		return _identificativoSdi;
	}

	@Override
	public void setIdentificativoSdi(String identificativoSdi) {
		_identificativoSdi = identificativoSdi;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setIdentificativoSdi",
						String.class);

				method.invoke(_documentoXmlFirmatoRemoteModel, identificativoSdi);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public String getDataOraRicezione() {
		return _dataOraRicezione;
	}

	@Override
	public void setDataOraRicezione(String dataOraRicezione) {
		_dataOraRicezione = dataOraRicezione;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setDataOraRicezione",
						String.class);

				method.invoke(_documentoXmlFirmatoRemoteModel, dataOraRicezione);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	@Override
	public String getErrore() {
		return _errore;
	}

	@Override
	public void setErrore(String errore) {
		_errore = errore;

		if (_documentoXmlFirmatoRemoteModel != null) {
			try {
				Class<?> clazz = _documentoXmlFirmatoRemoteModel.getClass();

				Method method = clazz.getMethod("setErrore", String.class);

				method.invoke(_documentoXmlFirmatoRemoteModel, errore);
			}
			catch (Exception e) {
				throw new UnsupportedOperationException(e);
			}
		}
	}

	public BaseModel<?> getDocumentoXmlFirmatoRemoteModel() {
		return _documentoXmlFirmatoRemoteModel;
	}

	public void setDocumentoXmlFirmatoRemoteModel(
		BaseModel<?> documentoXmlFirmatoRemoteModel) {
		_documentoXmlFirmatoRemoteModel = documentoXmlFirmatoRemoteModel;
	}

	public Object invokeOnRemoteModel(String methodName,
		Class<?>[] parameterTypes, Object[] parameterValues)
		throws Exception {
		Object[] remoteParameterValues = new Object[parameterValues.length];

		for (int i = 0; i < parameterValues.length; i++) {
			if (parameterValues[i] != null) {
				remoteParameterValues[i] = ClpSerializer.translateInput(parameterValues[i]);
			}
		}

		Class<?> remoteModelClass = _documentoXmlFirmatoRemoteModel.getClass();

		ClassLoader remoteModelClassLoader = remoteModelClass.getClassLoader();

		Class<?>[] remoteParameterTypes = new Class[parameterTypes.length];

		for (int i = 0; i < parameterTypes.length; i++) {
			if (parameterTypes[i].isPrimitive()) {
				remoteParameterTypes[i] = parameterTypes[i];
			}
			else {
				String parameterTypeName = parameterTypes[i].getName();

				remoteParameterTypes[i] = remoteModelClassLoader.loadClass(parameterTypeName);
			}
		}

		Method method = remoteModelClass.getMethod(methodName,
				remoteParameterTypes);

		Object returnValue = method.invoke(_documentoXmlFirmatoRemoteModel,
				remoteParameterValues);

		if (returnValue != null) {
			returnValue = ClpSerializer.translateOutput(returnValue);
		}

		return returnValue;
	}

	@Override
	public void persist() throws SystemException {
		if (this.isNew()) {
			DocumentoXmlFirmatoLocalServiceUtil.addDocumentoXmlFirmato(this);
		}
		else {
			DocumentoXmlFirmatoLocalServiceUtil.updateDocumentoXmlFirmato(this);
		}
	}

	@Override
	public DocumentoXmlFirmato toEscapedModel() {
		return (DocumentoXmlFirmato)ProxyUtil.newProxyInstance(DocumentoXmlFirmato.class.getClassLoader(),
			new Class[] { DocumentoXmlFirmato.class },
			new AutoEscapeBeanHandler(this));
	}

	@Override
	public Object clone() {
		DocumentoXmlFirmatoClp clone = new DocumentoXmlFirmatoClp();

		clone.setDocumentoXmlFirmatoId(getDocumentoXmlFirmatoId());
		clone.setDocumentoXmlIDFK(getDocumentoXmlIDFK());
		clone.setDataInvioDocumento(getDataInvioDocumento());
		clone.setNomeDocumento(getNomeDocumento());
		clone.setFileDocumento(getFileDocumento());
		clone.setIdentificativoSdi(getIdentificativoSdi());
		clone.setDataOraRicezione(getDataOraRicezione());
		clone.setErrore(getErrore());

		return clone;
	}

	@Override
	public int compareTo(DocumentoXmlFirmato documentoXmlFirmato) {
		long primaryKey = documentoXmlFirmato.getPrimaryKey();

		if (getPrimaryKey() < primaryKey) {
			return -1;
		}
		else if (getPrimaryKey() > primaryKey) {
			return 1;
		}
		else {
			return 0;
		}
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}

		if (!(obj instanceof DocumentoXmlFirmatoClp)) {
			return false;
		}

		DocumentoXmlFirmatoClp documentoXmlFirmato = (DocumentoXmlFirmatoClp)obj;

		long primaryKey = documentoXmlFirmato.getPrimaryKey();

		if (getPrimaryKey() == primaryKey) {
			return true;
		}
		else {
			return false;
		}
	}

	@Override
	public int hashCode() {
		return (int)getPrimaryKey();
	}

	@Override
	public String toString() {
		StringBundler sb = new StringBundler(17);

		sb.append("{documentoXmlFirmatoId=");
		sb.append(getDocumentoXmlFirmatoId());
		sb.append(", documentoXmlIDFK=");
		sb.append(getDocumentoXmlIDFK());
		sb.append(", dataInvioDocumento=");
		sb.append(getDataInvioDocumento());
		sb.append(", nomeDocumento=");
		sb.append(getNomeDocumento());
		sb.append(", fileDocumento=");
		sb.append(getFileDocumento());
		sb.append(", identificativoSdi=");
		sb.append(getIdentificativoSdi());
		sb.append(", dataOraRicezione=");
		sb.append(getDataOraRicezione());
		sb.append(", errore=");
		sb.append(getErrore());
		sb.append("}");

		return sb.toString();
	}

	@Override
	public String toXmlString() {
		StringBundler sb = new StringBundler(28);

		sb.append("<model><model-name>");
		sb.append("it.apuliait.model.DocumentoXmlFirmato");
		sb.append("</model-name>");

		sb.append(
			"<column><column-name>documentoXmlFirmatoId</column-name><column-value><![CDATA[");
		sb.append(getDocumentoXmlFirmatoId());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>documentoXmlIDFK</column-name><column-value><![CDATA[");
		sb.append(getDocumentoXmlIDFK());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>dataInvioDocumento</column-name><column-value><![CDATA[");
		sb.append(getDataInvioDocumento());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>nomeDocumento</column-name><column-value><![CDATA[");
		sb.append(getNomeDocumento());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>fileDocumento</column-name><column-value><![CDATA[");
		sb.append(getFileDocumento());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>identificativoSdi</column-name><column-value><![CDATA[");
		sb.append(getIdentificativoSdi());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>dataOraRicezione</column-name><column-value><![CDATA[");
		sb.append(getDataOraRicezione());
		sb.append("]]></column-value></column>");
		sb.append(
			"<column><column-name>errore</column-name><column-value><![CDATA[");
		sb.append(getErrore());
		sb.append("]]></column-value></column>");

		sb.append("</model>");

		return sb.toString();
	}

	private long _documentoXmlFirmatoId;
	private long _documentoXmlIDFK;
	private String _dataInvioDocumento;
	private String _nomeDocumento;
	private String _fileDocumento;
	private String _identificativoSdi;
	private String _dataOraRicezione;
	private String _errore;
	private BaseModel<?> _documentoXmlFirmatoRemoteModel;
}